package com.redoor.app.stake.auth.service;

import com.redoor.app.stake.auth.model.BaseUser;
import com.redoor.app.stake.auth.model.BaseUserView;
import com.redoor.app.stake.auth.model.serviceModel.BaseUserServiceBean;
import com.redoor.app.stake.auth.model.serviceModel.LoginUserBean;
import com.redoornetwork.framework.mybatis.service.Service;
import sunbox.core.hsf.vo.OperatorItem;

import java.util.List;

/**
 * Created by wangjunlei on 2018-02-07 15:19:13.
 */

public interface BaseUserService extends Service<BaseUser, String> {
    /**
     * 根据登录名称查询用户数据
     * @param username
     * @return
     */
    LoginUserBean findByUsername(String username);

    /**
     * 根据uuid查询权限集合
     * @param uuid
     * @return
     */
    List<String> queryAllPerms(String uuid);

    /**
     * 注册码流程使用
     *  通过usertoken调用接口获取user信息
     *  将usertoken信息新增或者更新到数据库
     *
     * @param userToken
     * @return
     */
    public BaseUserView buildUserinfo(String userToken);

    /**
     * 获取当前session下的用户信息
     * @param sessionid 为空则获取当前session对象中的sessionid
     * @return
     */
    LoginUserBean getShiroUser(String sessionid);

    /**
     * 获取当前用户的uuid
     * @return
     */
    String getShiroUserUuid();

    /**
     * @Author zhangYiHang
     * @Date 2018/3/7 16:16
     * 根据用户Uuid以及原密码修改密码
     */
    int updateByUserUuidAndPassword(BaseUserServiceBean baseUserActon);

    /**
     * 新增用户
     * @param baseUserAction
     */
    int insertBaseUser(BaseUserServiceBean baseUserAction);

    /**
     * 根据条件查询列表
     * @param baseUser
     * @return
     */
    List<BaseUser> qryUser(BaseUser baseUser);
    /**
     * 根据用户uuid进行密码重置
     * @Author zhangYiHang
     * @Date 2018/3/9 10:47
     */
    int revicePassword(String uuid);
    /**
     * 用户删除(修改status状态)
     * @Author zhangYiHang
     * @Date 2018/3/10 14:19
     */
    Integer updateStatusByUuid(String uuid);
    /**
     * 根据主键修改对象
     * @Author zhangYiHang
     * @Date 2018/3/26 10:00
     * @Param
     */
    int updateByUuid(BaseUserServiceBean baseUserAction);

    /**
     * 添加科东用户到用户表
     * @param item
     */
    void addOperatorItemToUser(OperatorItem item);
    /**  
     *  地区权限控制
     *      1.没有登陆用户则有所有权限
     *      2.用户组织机构有 3 有所有权限
     *      3.用户组织机构为 省 或 地市 返回该组织机构
     *      4.用户组织机构为 地区 返回该地区的地市组织机构
     *
     * @author ZhangMumu
     * @date 2018/4/16 0016 21:10  
     * @param
     * @return
     */
    List<String> districtPermission();
}
